{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "6b2db89d",
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import pandas as pd\n",
    "import matplotlib.pyplot as plt"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "e42929c0",
   "metadata": {},
   "outputs": [],
   "source": [
    "from sklearn.model_selection import train_test_split\n",
    "from sklearn.metrics import accuracy_score\n",
    "from sklearn.metrics import f1_score"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "24555bfe",
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\Admin\\.conda\\envs\\oldervenv\\Lib\\site-packages\\lightautoml\\transformers\\text.py:22: UserWarning: 'gensim' - package isn't installed\n",
      "  warnings.warn(\"'gensim' - package isn't installed\")\n",
      "C:\\Users\\Admin\\.conda\\envs\\oldervenv\\Lib\\site-packages\\lightautoml\\addons\\interpretation\\l2x.py:23: UserWarning: 'gensim' - package isn't installed\n",
      "  warnings.warn(\"'gensim' - package isn't installed\")\n"
     ]
    }
   ],
   "source": [
    "from lightautoml.automl.presets.text_presets import TabularNLPAutoML\n",
    "from lightautoml.tasks import Task\n",
    "\n",
    "from lightautoml.addons.interpretation import LimeTextExplainer"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "98d6d9d3",
   "metadata": {},
   "outputs": [],
   "source": [
    "import torch"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "09020123",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "True"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "torch.cuda.is_available()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "39c081a6",
   "metadata": {},
   "outputs": [],
   "source": [
    "from transformers import logging\n",
    "\n",
    "logging.set_verbosity_error()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "8449e4ec",
   "metadata": {},
   "outputs": [],
   "source": [
    "np.random.seed(42)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "a7da60f3",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>text</th>\n",
       "      <th>sentiment</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>id</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>3225</th>\n",
       "      <td>Кирилл Жданов\\nОткрытие заводов по утилизации ...</td>\n",
       "      <td>positive</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4365</th>\n",
       "      <td>Почти во всех случаях обходилось без пострадав...</td>\n",
       "      <td>neutral</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5406</th>\n",
       "      <td>25.11.2016, 12:14\\nЕАБР предоставит банку \"Цен...</td>\n",
       "      <td>neutral</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3485</th>\n",
       "      <td>Отравление двухлетней девочки в Актау не связа...</td>\n",
       "      <td>neutral</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5401</th>\n",
       "      <td>По состоянию на 10 января 2017 года в области ...</td>\n",
       "      <td>neutral</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3239</th>\n",
       "      <td>Суд № 2 Алматинского района Астаны принял реше...</td>\n",
       "      <td>negative</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4383</th>\n",
       "      <td>Национальный банк РК намерен обратиться в прав...</td>\n",
       "      <td>neutral</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5263</th>\n",
       "      <td>Пересмотр — при наличии правовых оснований \\n\\...</td>\n",
       "      <td>neutral</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8492</th>\n",
       "      <td>АСТАНА. КАЗИНФОРМ - Согласно дорожной карте ме...</td>\n",
       "      <td>neutral</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9749</th>\n",
       "      <td>\\nСегодня в Бишкеке начала работу торговая мис...</td>\n",
       "      <td>positive</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                                                   text sentiment\n",
       "id                                                               \n",
       "3225  Кирилл Жданов\\nОткрытие заводов по утилизации ...  positive\n",
       "4365  Почти во всех случаях обходилось без пострадав...   neutral\n",
       "5406  25.11.2016, 12:14\\nЕАБР предоставит банку \"Цен...   neutral\n",
       "3485  Отравление двухлетней девочки в Актау не связа...   neutral\n",
       "5401  По состоянию на 10 января 2017 года в области ...   neutral\n",
       "3239  Суд № 2 Алматинского района Астаны принял реше...  negative\n",
       "4383  Национальный банк РК намерен обратиться в прав...   neutral\n",
       "5263  Пересмотр — при наличии правовых оснований \\n\\...   neutral\n",
       "8492  АСТАНА. КАЗИНФОРМ - Согласно дорожной карте ме...   neutral\n",
       "9749  \\nСегодня в Бишкеке начала работу торговая мис...  positive"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "articles = pd.read_json('data/articles/train.json')\n",
    "articles.drop_duplicates(subset=['text'], inplace=True)\n",
    "articles.set_index('id', inplace=True)\n",
    "articles.sample(10)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "c0c306a6",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>count</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>sentiment</th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>negative</th>\n",
       "      <td>1381</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>neutral</th>\n",
       "      <td>3893</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>positive</th>\n",
       "      <td>2675</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "           count\n",
       "sentiment       \n",
       "negative    1381\n",
       "neutral     3893\n",
       "positive    2675"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "full_counts = articles.groupby('sentiment').agg(count = ('sentiment', 'count'))\n",
    "full_counts"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "6bcdfd61",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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MWOUnp5e6QDLlJQU3Xbbbbr22mvVr18/9e7dW08++WTF/aeffrry8vJOutnC4XAoKipKb7zxhs4++2xJJ17D99dNG9OmTdOGDRu0dOlSSTpu1O/qq6+Wr6+vnnvuuYrnWL58uQYNGqT8/PwTbspg0wbcTUFpgbKKs5RVlKXMokxlFf32++I/fv/7/VlFWY22htDH5qNQv1CF+Ico1D9UYf5hFb8P9Q9ViF+I4kLiyotcaDM1C2um+JB4+fl4/c/UANyE1383+utlb5o1a6b09HStW7dOeXl5x109pLCwUDt27JAkbdmyRf/v//2/Svf37du3YopVkg4fPqx//etfWrZsmdLT02W321VQUKA9e/bUKufEiRPVr18/HThwQM2bN9e8efM0ZsyYiinedevWaf369Zo3b17FxzidTjkcDu3ateukZ0EB7iTEP0Qh/iFKDEus/sEq302cVZSl3JJclTpKVeIoUYm9RKWOUpXaS8tvs5eozFkmp9Mpp5zH/yqnbLIp2C/4uCL3+xvHmgDwdF5f+H4/P+l3NptNDodDeXl5atas2QnXdPx5HV11Jk2apIyMDD3++ONq1aqVAgMD1b9/f5WUlNQqZ58+fdS2bVu99dZbuuGGGzR//ny98sorFffn5eXpuuuu09SpU4/72JYtj59aA6wgwDdA8aHxig+NNx0FANya1xe+k+nVq5cOHTokPz+/io0Vf5WamqpVq1bpiiuuqLht1apVlR6zYsUKPf300xo9erQkae/evTp69Gilx/j7+9foEjsTJ07UvHnz1KJFC/n4+GjMmD+msXv16qVNmzYpJSWlpp8iAADwEj6mA7ir4cOHq3///ho/frwWLVqktLQ0fffdd7rrrru0evVqSdJNN92kF198UXPnztW2bds0c+ZMrV+/vtKZWO3atdNrr72mzZs3a+XKlZo4caKCgytPDyUnJ2vp0qU6dOiQsrKyTppp4sSJWrNmjWbNmqULLrig0trC22+/Xd99952mTJmitWvXatu2bfrwww81ZcoUF39lAACAp6HwnYTNZtPChQs1cOBAXXnllWrfvr0uueQS7d69W/Hx5dNHEydO1J133qnp06erV69e2rVrlyZPnlxpA8SLL76orKws9erVS5dffrmmTp2quLi4Sq/1yCOPaPHixUpKSlLPnj1PmiklJUV9+/bV+vXrNXHixEr3devWTV9//bW2bt2qM844Qz179tQ999yj5s2bu/CrAgAAPBGXVnOxESNGKCEhQa+99prpKNXizw4AAO/AGr56KCgo0LPPPquRI0fK19dXb775ppYsWaLFixebjgYAAFCBwlcPv0/7zpo1S0VFRUpNTdX777+v4cOHm44GAABQgcJXD8HBwVqyZInpGAAAAFVi0wYAAIDFUfgAAAAsjsIHAABgcRQ+AAAAi6PwAQAAWByFDwAAwOIofB4mOTlZjz32mOkYAADAgzTsOXwzIhv06Su/Vk7jvVYtDB48WD169KCkAQAAYxjhcwNOp1NlZWWmYwAAAIvy6sI3ePBgTZ06VbfddpuaNGmihIQEzZgxo+L+7OxsXX311YqNjVVERISGDh2qdevWVdw/efJkjR8/vtJzTps2TYMHD664/+uvv9bjjz8um80mm82mtLQ0LVu2TDabTZ999plOOeUUBQYGavny5dqxY4fOOeccxcfHKywsTH369OFKHgAAoN68uvBJ0ty5cxUaGqqVK1fqoYce0n333afFixdLki688EKlp6frs88+008//aRevXpp2LBhyszMrNFzP/744+rfv7+uueYaHTx4UAcPHlRSUlLF/XfccYf+/e9/a/PmzerWrZvy8vI0evRoLV26VD///LNGjRqlsWPHas+ePQ3yuQMAAO/g9dfS7datm+69915JUrt27fTkk09q6dKlCg4O1o8//qj09HQFBgZKkh5++GEtWLBA7733nq699tpqnzsyMlIBAQEKCQlRQkLCcfffd999GjFiRMX7TZo0Uffu3Svev//++zV//nx99NFHmjJlSn0/VQAA4KUofN26VXq/WbNmSk9P17p165SXl6emTZtWur+wsFA7duxwyWv37t270vt5eXmaMWOGPv30Ux08eFBlZWUqLCxkhA8AANSL1xc+f3//Su/bbDY5HA7l5eWpWbNmWrZs2XEfExUVJUny8fGR0+msdF9paWmNXzs0NLTS+9OnT9fixYv18MMPKyUlRcHBwbrgggtUUlJS4+cEAAD4K68vfCfTq1cvHTp0SH5+fkpOTj7hY2JjY7Vx48ZKt61du7ZSiQwICJDdbq/Ra65YsUKTJ0/WueeeK6l8xC8tLa1O+QEAAH7n9Zs2Tmb48OHq37+/xo8fr0WLFiktLU3fffed7rrrLq1evVqSNHToUK1evVqvvvqqtm3bpnvvvfe4ApicnKyVK1cqLS1NR48elcPhOOlrtmvXTh988IHWrl2rdevWacKECVU+HgAAoCYofCdhs9m0cOFCDRw4UFdeeaXat2+vSy65RLt371Z8fLwkaeTIkbr77rt12223qU+fPsrNzdUVV1xR6XmmT58uX19fderUSbGxsVWux3v00UcVHR2tAQMGaOzYsRo5cqR69erVoJ8nAACwPpvzr4vQaqmoqEi7du1S69atFRQU5KpcaAT82QEA4B0Y4QMAALA4Ch8AAIDFUfgAAAAsjsIHAABgcRQ+AAAAi6PwAQAAWByFDwAAwOIofAAAABZH4QMAALA4Cl8DWbZsmWw2m7Kzs6t8XHJysh577LFGyQQAALyTX0M+ede5XRvy6SvZMGlDo71WTQwYMEAHDx5UZGSkJOmVV17RtGnTjiuAq1atUmhoqIGEAADAWzRo4fNmAQEBSkhIqPZxsbGxjZAGAAB4M6+e0h08eLCmTJmiKVOmKDIyUjExMbr77rvldDolSVlZWbriiisUHR2tkJAQnXXWWdq2bVvFx+/evVtjx45VdHS0QkND1blzZy1cuFBS5SndZcuW6corr1ROTo5sNptsNptmzJghqfKU7oQJE3TxxRdXylhaWqqYmBi9+uqrkiSHw6HZs2erdevWCg4OVvfu3fXee+818FcKAAB4Mq8ufJI0d+5c+fn56ccff9Tjjz+uRx99VC+88IIkafLkyVq9erU++ugjff/993I6nRo9erRKS0slSTfeeKOKi4v1zTffaMOGDXrwwQcVFhZ23GsMGDBAjz32mCIiInTw4EEdPHhQ06dPP+5xEydO1Mcff6y8vLyK27744gsVFBTo3HPPlSTNnj1br776qp599ln98ssvuuWWW3TZZZfp66+/bogvDwAAsACvn9JNSkrSnDlzZLPZlJqaqg0bNmjOnDkaPHiwPvroI61YsUIDBgyQJM2bN09JSUlasGCBLrzwQu3Zs0fnn3++unYtX6vYpk2bE75GQECAIiMjZbPZqpzmHTlypEJDQzV//nxdfvnlkqQ33nhD48aNU3h4uIqLi/XAAw9oyZIl6t+/f8VrLl++XM8995wGDRrkyi8NAACwCK8f4evXr59sNlvF+/3799e2bdu0adMm+fn56dRTT624r2nTpkpNTdXmzZslSVOnTtXMmTN12mmn6d5779X69evrlcXPz08XXXSR5s2bJ0nKz8/Xhx9+qIkTJ0qStm/froKCAo0YMUJhYWEVb6+++qp27NhRr9cGAADW5fUjfPVx9dVXa+TIkfr000+1aNEizZ49W4888ohuuummOj/nxIkTNWjQIKWnp2vx4sUKDg7WqFGjJKliqvfTTz9VYmJipY8LDAys+ycCAAAszetH+FauXFnp/R9++EHt2rVTp06dVFZWVun+jIwMbdmyRZ06daq4LSkpSddff70++OAD/f3vf9fzzz9/wtcJCAiQ3W6vNs+AAQOUlJSkt99+W/PmzdOFF14of39/SVKnTp0UGBioPXv2KCUlpdJbUlJSXT59AADgBbx+hG/Pnj269dZbdd1112nNmjV64okn9Mgjj6hdu3Y655xzdM011+i5555TeHi47rjjDiUmJuqcc86RJE2bNk1nnXWW2rdvr6ysLH311Vfq2LHjCV8nOTlZeXl5Wrp0qbp3766QkBCFhISc8LETJkzQs88+q61bt+qrr76quD08PFzTp0/XLbfcIofDodNPP105OTlasWKFIiIiNGnSJNd/gQAAgMfz+hG+K664QoWFherbt69uvPFG3Xzzzbr22mslSS+//LJOOeUUnX322erfv7+cTqcWLlxYMeJmt9t14403qmPHjho1apTat2+vp59++oSvM2DAAF1//fW6+OKLFRsbq4ceeuikmSZOnKhNmzYpMTFRp512WqX77r//ft19992aPXt2xet++umnat26tYu+IgAAwGpszt8PnaujoqIi7dq1S61bt1ZQUJCrcjWKwYMHq0ePHl57aTNP/rMDAAA15/UjfAAAAFZH4QMAALA4r960sWzZMtMRAAAAGhwjfAAAABbnssJXz70fMIA/MwAAvEO9C9/vR5QUFBTUOwwa1+9/Zr//GQIAAGuq9xo+X19fRUVFKT09XZIUEhJS6dq0cD9Op1MFBQVKT09XVFSUfH19TUcCAAANqN7n8EnlBeLQoUPKzs52QSQ0lqioKCUkJFDQAQCwOJcUvt/Z7XaVlpa66unQgPz9/RnZAwDAS7i08AEAAMD9cCwLAACAxVH4AAAALI7CBwAAYHEUPgAAAIuj8AEAAFgchQ8AAMDiKHwAAAAWR+EDAACwOAofAACAxVH4AAAALI7CBwAAYHEUPgAAAIuj8AEAAFgchQ8AAMDi/j9WPJQdDekf4AAAAABJRU5ErkJggg==",
      "text/plain": [
       "<Figure size 800x800 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "full_counts.plot.pie(figsize=(8, 8), subplots=True, autopct='%1.1f%%')\n",
    "plt.ylabel('')\n",
    "plt.legend(loc='lower left')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "id": "67bda5c6",
   "metadata": {},
   "outputs": [],
   "source": [
    "sentiment_map = {\n",
    "    'negative': 0,\n",
    "    'neutral': 1,\n",
    "    'positive': 2\n",
    "}"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "id": "11d34a89",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>text</th>\n",
       "      <th>sentiment</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>id</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>8360</th>\n",
       "      <td>Министр национальной экономики Тимур Сулеймено...</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7634</th>\n",
       "      <td>Комитет национальной безопасности РК подозрева...</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3726</th>\n",
       "      <td>АСТАНА, 1 ноября. /Корр. ТАСС Светлана Тумаков...</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5290</th>\n",
       "      <td>\\nВ Министерстве по делам религий и гражданско...</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2249</th>\n",
       "      <td>\\n«Ожидается, что в рамках проекта по утилизац...</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3118</th>\n",
       "      <td>Общий инвестиционный убыток ЕНПФ в декабре про...</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8508</th>\n",
       "      <td>Отравление двухлетней девочки в Актау не связа...</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9057</th>\n",
       "      <td>\\nРезультирующее влияние ключевых внешних факт...</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7274</th>\n",
       "      <td>Адвокат главы ЕНПФ Руслана Ерденаева и начальн...</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2224</th>\n",
       "      <td>Алматы. 20 января. Центр информации. АО \"Казко...</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                                                   text  sentiment\n",
       "id                                                                \n",
       "8360  Министр национальной экономики Тимур Сулеймено...          1\n",
       "7634  Комитет национальной безопасности РК подозрева...          1\n",
       "3726  АСТАНА, 1 ноября. /Корр. ТАСС Светлана Тумаков...          1\n",
       "5290  \\nВ Министерстве по делам религий и гражданско...          1\n",
       "2249  \\n«Ожидается, что в рамках проекта по утилизац...          2\n",
       "3118  Общий инвестиционный убыток ЕНПФ в декабре про...          1\n",
       "8508  Отравление двухлетней девочки в Актау не связа...          1\n",
       "9057  \\nРезультирующее влияние ключевых внешних факт...          1\n",
       "7274  Адвокат главы ЕНПФ Руслана Ерденаева и начальн...          0\n",
       "2224  Алматы. 20 января. Центр информации. АО \"Казко...          1"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "articles.sentiment = articles.sentiment.apply(lambda x: sentiment_map[x])\n",
    "articles.sample(10)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "id": "a3e31fd2",
   "metadata": {},
   "outputs": [],
   "source": [
    "train, test = train_test_split(articles, test_size=0.2, random_state=42)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "id": "9579e198",
   "metadata": {},
   "outputs": [],
   "source": [
    "roles = {\n",
    "    'text': ['text'],\n",
    "    'target': 'sentiment'\n",
    "}"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "id": "4f963d51",
   "metadata": {},
   "outputs": [],
   "source": [
    "task = Task('multiclass', loss='f1')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "id": "c9819548",
   "metadata": {},
   "outputs": [],
   "source": [
    "automl = TabularNLPAutoML(\n",
    "    task=task,\n",
    "    gpu_ids='0',\n",
    "    general_params={\n",
    "        'nested_cv': False,\n",
    "        'use_algos': [['nn', 'linear_l2', 'lgb']]\n",
    "    },\n",
    "    text_params={\n",
    "        'lang': 'ru'\n",
    "    },\n",
    "    timeout=3600,\n",
    "    cpu_limit=4,\n",
    "    reader_params={\n",
    "        'random_state': 42\n",
    "    },\n",
    "    nn_params={\n",
    "        'opt_params': {'lr': 1e-5},\n",
    "        'max_length': 128,\n",
    "        'bs': 32,\n",
    "        'n_epochs': 7,\n",
    "    }\n",
    ")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "id": "4af913f8",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'text': ['text'], 'target': 'sentiment'}"
      ]
     },
     "execution_count": 17,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "roles"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "id": "cbcd9243",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[14:53:41] Stdout logging level is DEBUG.\n",
      "[14:53:41] Model language mode: ru\n",
      "[14:53:41] Task: multiclass\n",
      "\n",
      "[14:53:41] Start automl preset with listed constraints:\n",
      "[14:53:41] - time: 3600.00 seconds\n",
      "[14:53:41] - CPU: 4 cores\n",
      "[14:53:41] - memory: 16 GB\n",
      "\n",
      "[14:53:41] \u001b[1mTrain data shape: (6359, 2)\u001b[0m\n",
      "\n",
      "[14:53:41] Layer \u001b[1m1\u001b[0m train process start. Time left 3599.98 secs\n",
      "[14:54:05] Start fitting \u001b[1mLvl_0_Pipe_0_Mod_0_LinearL2\u001b[0m ...\n",
      "[14:54:05] Training params: {'tol': 1e-06, 'max_iter': 100, 'cs': [1e-05, 5e-05, 0.0001, 0.0005, 0.001, 0.005, 0.01, 0.05, 0.1, 0.5, 1, 5, 10, 50, 100, 500, 1000, 5000, 10000, 50000, 100000], 'early_stopping': 2, 'categorical_idx': [], 'embed_sizes': (), 'data_size': 100}\n",
      "[14:54:05] ===== Start working with \u001b[1mfold 0\u001b[0m for \u001b[1mLvl_0_Pipe_0_Mod_0_LinearL2\u001b[0m =====\n",
      "[14:54:07] Linear model: C = 1e-05 score = -5.392030468185371\n",
      "[14:54:07] Linear model: C = 5e-05 score = -5.392030468185371\n",
      "[14:54:07] Linear model: C = 0.0001 score = -5.392030468185371\n",
      "[14:54:07] ===== Start working with \u001b[1mfold 1\u001b[0m for \u001b[1mLvl_0_Pipe_0_Mod_0_LinearL2\u001b[0m =====\n",
      "[14:54:07] Linear model: C = 1e-05 score = -5.575104436273621\n",
      "[14:54:07] Linear model: C = 5e-05 score = -5.575104436273621\n",
      "[14:54:07] Linear model: C = 0.0001 score = -5.575104436273621\n",
      "[14:54:07] ===== Start working with \u001b[1mfold 2\u001b[0m for \u001b[1mLvl_0_Pipe_0_Mod_0_LinearL2\u001b[0m =====\n",
      "[14:54:08] Linear model: C = 1e-05 score = -5.503667635197014\n",
      "[14:54:08] Linear model: C = 5e-05 score = -5.503667635197014\n",
      "[14:54:08] Linear model: C = 0.0001 score = -5.503667635197014\n",
      "[14:54:08] Fitting \u001b[1mLvl_0_Pipe_0_Mod_0_LinearL2\u001b[0m finished. score = \u001b[1m-5.490265405949919\u001b[0m\n",
      "[14:54:08] \u001b[1mLvl_0_Pipe_0_Mod_0_LinearL2\u001b[0m fitting and predicting completed\n",
      "[14:54:08] Time left 3572.71 secs\n",
      "\n",
      "[14:54:11] Feature concated__text fitted\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "  0%|                                                                                           | 0/20 [00:00<?, ?it/s]C:\\Users\\Admin\\.conda\\envs\\oldervenv\\Lib\\site-packages\\transformers\\models\\bert\\modeling_bert.py:435: UserWarning: 1Torch was not compiled with flash attention. (Triggered internally at ..\\aten\\src\\ATen\\native\\transformers\\cuda\\sdp_utils.cpp:455.)\n",
      "  attn_output = torch.nn.functional.scaled_dot_product_attention(\n",
      "100%|██████████████████████████████████████████████████████████████████████████████████| 20/20 [01:15<00:00,  3.76s/it]\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[14:55:27] Feature concated__text transformed\n",
      "[14:55:27] Start fitting \u001b[1mLvl_0_Pipe_1_Mod_0_LightGBM\u001b[0m ...\n",
      "[14:55:27] Training params: {'task': 'train', 'learning_rate': 0.01, 'num_leaves': 32, 'feature_fraction': 0.7, 'bagging_fraction': 0.7, 'bagging_freq': 1, 'max_depth': -1, 'verbosity': -1, 'reg_alpha': 0.5, 'reg_lambda': 0.0, 'min_split_gain': 0.0, 'zero_as_missing': False, 'num_threads': 4, 'max_bin': 255, 'min_data_in_bin': 3, 'num_trees': 3000, 'early_stopping_rounds': 200, 'random_state': 42}\n",
      "[14:55:27] ===== Start working with \u001b[1mfold 0\u001b[0m for \u001b[1mLvl_0_Pipe_1_Mod_0_LightGBM\u001b[0m =====\n",
      "[14:55:28] Training until validation scores don't improve for 200 rounds\n",
      "[14:55:36] [100]\tvalid's multi_logloss: 0.0634426\n",
      "[14:55:41] [200]\tvalid's multi_logloss: -0.688644\n",
      "[14:55:43] [300]\tvalid's multi_logloss: -1.08469\n",
      "[14:55:44] [400]\tvalid's multi_logloss: -1.35502\n",
      "[14:55:45] [500]\tvalid's multi_logloss: -1.56105\n",
      "[14:55:46] [600]\tvalid's multi_logloss: -1.73281\n",
      "[14:55:46] [700]\tvalid's multi_logloss: -1.88011\n",
      "[14:55:47] [800]\tvalid's multi_logloss: -2.00917\n",
      "[14:55:48] [900]\tvalid's multi_logloss: -2.1237\n",
      "[14:55:49] [1000]\tvalid's multi_logloss: -2.22688\n",
      "[14:55:49] [1100]\tvalid's multi_logloss: -2.32016\n",
      "[14:55:50] [1200]\tvalid's multi_logloss: -2.40595\n",
      "[14:55:50] [1300]\tvalid's multi_logloss: -2.48485\n",
      "[14:55:51] [1400]\tvalid's multi_logloss: -2.55745\n",
      "[14:55:52] [1500]\tvalid's multi_logloss: -2.62451\n",
      "[14:55:52] [1600]\tvalid's multi_logloss: -2.68829\n",
      "[14:55:53] [1700]\tvalid's multi_logloss: -2.74702\n",
      "[14:55:54] [1800]\tvalid's multi_logloss: -2.803\n",
      "[14:55:54] [1900]\tvalid's multi_logloss: -2.85587\n",
      "[14:55:55] [2000]\tvalid's multi_logloss: -2.90519\n",
      "[14:55:56] [2100]\tvalid's multi_logloss: -2.95272\n",
      "[14:55:56] [2200]\tvalid's multi_logloss: -2.99798\n",
      "[14:55:57] [2300]\tvalid's multi_logloss: -3.04024\n",
      "[14:55:57] [2400]\tvalid's multi_logloss: -3.08065\n",
      "[14:55:58] [2500]\tvalid's multi_logloss: -3.1185\n",
      "[14:55:59] [2600]\tvalid's multi_logloss: -3.1511\n",
      "[14:55:59] [2700]\tvalid's multi_logloss: -3.178\n",
      "[14:56:00] [2800]\tvalid's multi_logloss: -3.20497\n",
      "[14:56:01] [2900]\tvalid's multi_logloss: -3.2352\n",
      "[14:56:01] [3000]\tvalid's multi_logloss: -3.26279\n",
      "[14:56:01] Did not meet early stopping. Best iteration is:\n",
      "[3000]\tvalid's multi_logloss: -3.26279\n",
      "[14:56:02] ===== Start working with \u001b[1mfold 1\u001b[0m for \u001b[1mLvl_0_Pipe_1_Mod_0_LightGBM\u001b[0m =====\n",
      "[14:56:03] Training until validation scores don't improve for 200 rounds\n",
      "[14:56:10] [100]\tvalid's multi_logloss: 0.0761112\n",
      "[14:56:14] [200]\tvalid's multi_logloss: -0.696421\n",
      "[14:56:16] [300]\tvalid's multi_logloss: -1.05952\n",
      "[14:56:17] [400]\tvalid's multi_logloss: -1.36078\n",
      "[14:56:18] [500]\tvalid's multi_logloss: -1.56615\n",
      "[14:56:19] [600]\tvalid's multi_logloss: -1.73779\n",
      "[14:56:20] [700]\tvalid's multi_logloss: -1.88473\n",
      "[14:56:21] [800]\tvalid's multi_logloss: -2.01324\n",
      "[14:56:22] [900]\tvalid's multi_logloss: -2.12751\n",
      "[14:56:22] [1000]\tvalid's multi_logloss: -2.2304\n",
      "[14:56:23] [1100]\tvalid's multi_logloss: -2.32401\n",
      "[14:56:24] [1200]\tvalid's multi_logloss: -2.40966\n",
      "[14:56:24] [1300]\tvalid's multi_logloss: -2.48847\n",
      "[14:56:25] [1400]\tvalid's multi_logloss: -2.56125\n",
      "[14:56:26] [1500]\tvalid's multi_logloss: -2.62914\n",
      "[14:56:26] [1600]\tvalid's multi_logloss: -2.692\n",
      "[14:56:27] [1700]\tvalid's multi_logloss: -2.75204\n",
      "[14:56:28] [1800]\tvalid's multi_logloss: -2.80846\n",
      "[14:56:28] [1900]\tvalid's multi_logloss: -2.86123\n",
      "[14:56:29] [2000]\tvalid's multi_logloss: -2.91063\n",
      "[14:56:29] [2100]\tvalid's multi_logloss: -2.95758\n",
      "[14:56:30] [2200]\tvalid's multi_logloss: -3.00296\n",
      "[14:56:31] [2300]\tvalid's multi_logloss: -3.04643\n",
      "[14:56:31] [2400]\tvalid's multi_logloss: -3.08676\n",
      "[14:56:32] [2500]\tvalid's multi_logloss: -3.12513\n",
      "[14:56:33] [2600]\tvalid's multi_logloss: -3.16365\n",
      "[14:56:33] [2700]\tvalid's multi_logloss: -3.19969\n",
      "[14:56:34] [2800]\tvalid's multi_logloss: -3.23493\n",
      "[14:56:34] [2900]\tvalid's multi_logloss: -3.26856\n",
      "[14:56:35] [3000]\tvalid's multi_logloss: -3.29923\n",
      "[14:56:35] Did not meet early stopping. Best iteration is:\n",
      "[3000]\tvalid's multi_logloss: -3.29923\n",
      "[14:56:36] ===== Start working with \u001b[1mfold 2\u001b[0m for \u001b[1mLvl_0_Pipe_1_Mod_0_LightGBM\u001b[0m =====\n",
      "[14:56:37] Training until validation scores don't improve for 200 rounds\n",
      "[14:56:44] [100]\tvalid's multi_logloss: 0.096443\n",
      "[14:56:49] [200]\tvalid's multi_logloss: -0.654832\n",
      "[14:56:51] [300]\tvalid's multi_logloss: -1.03018\n",
      "[14:56:52] [400]\tvalid's multi_logloss: -1.32579\n",
      "[14:56:53] [500]\tvalid's multi_logloss: -1.54647\n",
      "[14:56:54] [600]\tvalid's multi_logloss: -1.71751\n",
      "[14:56:55] [700]\tvalid's multi_logloss: -1.87838\n",
      "[14:56:56] [800]\tvalid's multi_logloss: -2.00829\n",
      "[14:56:56] [900]\tvalid's multi_logloss: -2.12311\n",
      "[14:56:57] [1000]\tvalid's multi_logloss: -2.226\n",
      "[14:56:58] [1100]\tvalid's multi_logloss: -2.31982\n",
      "[14:56:58] [1200]\tvalid's multi_logloss: -2.40612\n",
      "[14:56:59] [1300]\tvalid's multi_logloss: -2.48466\n",
      "[14:57:00] [1400]\tvalid's multi_logloss: -2.55765\n",
      "[14:57:00] [1500]\tvalid's multi_logloss: -2.62539\n",
      "[14:57:01] [1600]\tvalid's multi_logloss: -2.68914\n",
      "[14:57:02] [1700]\tvalid's multi_logloss: -2.74835\n",
      "[14:57:02] [1800]\tvalid's multi_logloss: -2.80361\n",
      "[14:57:03] [1900]\tvalid's multi_logloss: -2.85428\n",
      "[14:57:04] [2000]\tvalid's multi_logloss: -2.90244\n",
      "[14:57:04] [2100]\tvalid's multi_logloss: -2.94637\n",
      "[14:57:05] [2200]\tvalid's multi_logloss: -2.98388\n",
      "[14:57:06] [2300]\tvalid's multi_logloss: -3.02165\n",
      "[14:57:06] [2400]\tvalid's multi_logloss: -3.05769\n",
      "[14:57:07] [2500]\tvalid's multi_logloss: -3.09265\n",
      "[14:57:07] [2600]\tvalid's multi_logloss: -3.12717\n",
      "[14:57:08] [2700]\tvalid's multi_logloss: -3.15889\n",
      "[14:57:09] [2800]\tvalid's multi_logloss: -3.18984\n",
      "[14:57:09] [2900]\tvalid's multi_logloss: -3.22022\n",
      "[14:57:10] [3000]\tvalid's multi_logloss: -3.24582\n",
      "[14:57:10] Did not meet early stopping. Best iteration is:\n",
      "[3000]\tvalid's multi_logloss: -3.24582\n",
      "[14:57:11] Fitting \u001b[1mLvl_0_Pipe_1_Mod_0_LightGBM\u001b[0m finished. score = \u001b[1m-0.9336924481128742\u001b[0m\n",
      "[14:57:11] \u001b[1mLvl_0_Pipe_1_Mod_0_LightGBM\u001b[0m fitting and predicting completed\n",
      "[14:57:11] Time left 3389.54 secs\n",
      "\n",
      "[14:57:11] number of text features: 1 \n",
      "[14:57:11] number of categorical features: 0 \n",
      "[14:57:11] number of continuous features: 0 \n",
      "[14:57:11] Start fitting \u001b[1mLvl_0_Pipe_2_Mod_0_TorchNN__linear_layer_0\u001b[0m ...\n",
      "[14:57:11] Training params: {'num_workers': 4, 'pin_memory': False, 'max_length': 128, 'is_snap': False, 'input_bn': False, 'max_emb_size': 50, 'bert_name': None, 'pooling': 'cls', 'device': device(type='cuda', index=0), 'use_cont': True, 'use_cat': True, 'use_text': True, 'lang': 'ru', 'deterministic': False, 'multigpu': False, 'random_state': 42, 'model': '_linear_layer', 'model_with_emb': False, 'path_to_save': None, 'verbose_inside': None, 'verbose': 1, 'n_epochs': 7, 'snap_params': {'k': 1, 'early_stopping': True, 'patience': 1, 'swa': False}, 'bs': 32, 'emb_dropout': 0.1, 'emb_ratio': 3, 'opt': <class 'torch.optim.adam.Adam'>, 'opt_params': {'lr': 1e-05}, 'sch': <class 'torch.optim.lr_scheduler.ReduceLROnPlateau'>, 'scheduler_params': {'patience': 5, 'factor': 0.5, 'verbose': True}, 'loss': None, 'loss_params': {}, 'loss_on_logits': True, 'clip_grad': False, 'clip_grad_params': {}, 'init_bias': True, 'dataset': <class 'lightautoml.text.nn_model.UniversalDataset'>, 'tuned': False, 'optimization_search_space': None, 'verbose_bar': False, 'freeze_defaults': False, 'n_out': 3, 'hid_factor': [2, 2], 'hidden_size': [512, 512, 512], 'block_config': [2, 2], 'compression': 0.5, 'growth_size': 256, 'bn_factor': 2, 'drop_rate': 0.1, 'noise_std': 0.05, 'num_init_features': None, 'act_fun': <class 'torch.nn.modules.activation.ReLU'>, 'use_noise': False, 'use_bn': True, 'embedding_size': 10, 'cat_embedder': 'cat', 'cont_embedder': 'cont', 'stop_by_metric': False, 'device_ids': None, 'num_dims': 0, 'text_features': ['concated__text'], 'bias': array([-1.74551112, -0.7101169 , -1.09704095])}\n",
      "[14:57:11] ===== Start working with \u001b[1mfold 0\u001b[0m for \u001b[1mLvl_0_Pipe_2_Mod_0_TorchNN__linear_layer_0\u001b[0m =====\n",
      "[14:57:13] Last linear layer not founded, so init_bias=False\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\Admin\\.conda\\envs\\oldervenv\\Lib\\site-packages\\torch\\optim\\lr_scheduler.py:28: UserWarning: The verbose parameter is deprecated. Please use get_last_lr() to access the learning rate.\n",
      "  warnings.warn(\"The verbose parameter is deprecated. Please use get_last_lr() \"\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[14:59:09] Epoch: 0, train loss: -0.4676361083984375, val loss: -0.5013915300369263, val metric: -0.9196711578228483\n",
      "[15:01:07] Epoch: 1, train loss: -0.5035665035247803, val loss: -0.5075097680091858, val metric: -0.8718536559568473\n",
      "[15:03:04] Epoch: 2, train loss: -0.5257828831672668, val loss: -0.5147332549095154, val metric: -0.8179419382259158\n",
      "[15:05:00] Epoch: 3, train loss: -0.5491076111793518, val loss: -0.5120641589164734, val metric: -0.7926713596740125\n",
      "[15:05:03] ===== Start working with \u001b[1mfold 1\u001b[0m for \u001b[1mLvl_0_Pipe_2_Mod_0_TorchNN__linear_layer_0\u001b[0m =====\n",
      "[15:05:05] Last linear layer not founded, so init_bias=False\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\Admin\\.conda\\envs\\oldervenv\\Lib\\site-packages\\torch\\optim\\lr_scheduler.py:28: UserWarning: The verbose parameter is deprecated. Please use get_last_lr() to access the learning rate.\n",
      "  warnings.warn(\"The verbose parameter is deprecated. Please use get_last_lr() \"\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[15:07:04] Epoch: 0, train loss: -0.4668887257575989, val loss: -0.4999580979347229, val metric: -0.8974825076592612\n",
      "[15:08:58] Epoch: 1, train loss: -0.5077371597290039, val loss: -0.5105751752853394, val metric: -0.8504946962853204\n",
      "[15:10:49] Epoch: 2, train loss: -0.5264902114868164, val loss: -0.5128782391548157, val metric: -0.8289939121148941\n",
      "[15:12:40] Epoch: 3, train loss: -0.5482926964759827, val loss: -0.5080201625823975, val metric: -0.850916243313708\n",
      "[15:12:43] ===== Start working with \u001b[1mfold 2\u001b[0m for \u001b[1mLvl_0_Pipe_2_Mod_0_TorchNN__linear_layer_0\u001b[0m =====\n",
      "[15:12:45] Last linear layer not founded, so init_bias=False\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\Admin\\.conda\\envs\\oldervenv\\Lib\\site-packages\\torch\\optim\\lr_scheduler.py:28: UserWarning: The verbose parameter is deprecated. Please use get_last_lr() to access the learning rate.\n",
      "  warnings.warn(\"The verbose parameter is deprecated. Please use get_last_lr() \"\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[15:14:36] Epoch: 0, train loss: -0.4658328592777252, val loss: -0.5113288760185242, val metric: -0.8516125572756583\n",
      "[15:16:27] Epoch: 1, train loss: -0.5041620135307312, val loss: -0.513862669467926, val metric: -0.8605462400210266\n",
      "[15:18:17] Epoch: 2, train loss: -0.5240338444709778, val loss: -0.5115302205085754, val metric: -0.9002872222163845\n",
      "[15:18:19] Fitting \u001b[1mLvl_0_Pipe_2_Mod_0_TorchNN__linear_layer_0\u001b[0m finished. score = \u001b[1m-0.8479500459522702\u001b[0m\n",
      "[15:18:19] \u001b[1mLvl_0_Pipe_2_Mod_0_TorchNN__linear_layer_0\u001b[0m fitting and predicting completed\n",
      "[15:18:19] Time left 2121.23 secs\n",
      "\n",
      "[15:18:19] \u001b[1mLayer 1 training completed.\u001b[0m\n",
      "\n",
      "[15:18:19] Blending: optimization starts with equal weights and score \u001b[1m-0.752515666803781\u001b[0m\n",
      "[15:18:19] Blending: iteration \u001b[1m0\u001b[0m: score = \u001b[1m-0.7099130000720372\u001b[0m, weights = \u001b[1m[0.15976918 0.2773664  0.5628644 ]\u001b[0m\n",
      "[15:18:20] Blending: iteration \u001b[1m1\u001b[0m: score = \u001b[1m-0.7098956687139307\u001b[0m, weights = \u001b[1m[0.15583974 0.28625026 0.55791   ]\u001b[0m\n",
      "[15:18:20] Blending: iteration \u001b[1m2\u001b[0m: score = \u001b[1m-0.709895675653124\u001b[0m, weights = \u001b[1m[0.15594661 0.286214   0.55783933]\u001b[0m\n",
      "[15:18:20] Blending: no score update. Terminated\n",
      "\n",
      "[15:18:20] \u001b[1mAutoml preset training completed in 1479.06 seconds\u001b[0m\n",
      "\n",
      "[15:18:20] Model description:\n",
      "Final prediction for new objects (level 0) = \n",
      "\t 0.15584 * (3 averaged models Lvl_0_Pipe_0_Mod_0_LinearL2) +\n",
      "\t 0.28625 * (3 averaged models Lvl_0_Pipe_1_Mod_0_LightGBM) +\n",
      "\t 0.55791 * (3 averaged models Lvl_0_Pipe_2_Mod_0_TorchNN__linear_layer_0) \n",
      "\n",
      "CPU times: total: 21min 54s\n",
      "Wall time: 24min 39s\n"
     ]
    }
   ],
   "source": [
    "%%time\n",
    "oof_predict = automl.fit_predict(train, roles=roles, verbose=10)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "id": "ff74d073",
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|████████████████████████████████████████████████████████████████████████████████████| 5/5 [00:36<00:00,  7.22s/it]\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[15:19:04] Feature concated__text transformed\n",
      "[15:19:07] Last linear layer not founded, so init_bias=False\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\Admin\\.conda\\envs\\oldervenv\\Lib\\site-packages\\torch\\optim\\lr_scheduler.py:28: UserWarning: The verbose parameter is deprecated. Please use get_last_lr() to access the learning rate.\n",
      "  warnings.warn(\"The verbose parameter is deprecated. Please use get_last_lr() \"\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[15:19:37] Last linear layer not founded, so init_bias=False\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\Admin\\.conda\\envs\\oldervenv\\Lib\\site-packages\\torch\\optim\\lr_scheduler.py:28: UserWarning: The verbose parameter is deprecated. Please use get_last_lr() to access the learning rate.\n",
      "  warnings.warn(\"The verbose parameter is deprecated. Please use get_last_lr() \"\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[15:20:08] Last linear layer not founded, so init_bias=False\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\Admin\\.conda\\envs\\oldervenv\\Lib\\site-packages\\torch\\optim\\lr_scheduler.py:28: UserWarning: The verbose parameter is deprecated. Please use get_last_lr() to access the learning rate.\n",
      "  warnings.warn(\"The verbose parameter is deprecated. Please use get_last_lr() \"\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "array([[0.08144191, 0.4056108 , 0.5129473 ],\n",
       "       [0.70450854, 0.2367191 , 0.05877233],\n",
       "       [0.03906991, 0.34120739, 0.61972284],\n",
       "       ...,\n",
       "       [0.11621585, 0.80239284, 0.08139141],\n",
       "       [0.07361812, 0.30763164, 0.61875033],\n",
       "       [0.09449469, 0.86721945, 0.03828591]], dtype=float32)"
      ]
     },
     "execution_count": 19,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "test_pred = automl.predict(test)\n",
    "test_pred"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "id": "6e4fba0e",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([2, 0, 2, ..., 1, 2, 1], dtype=int64)"
      ]
     },
     "execution_count": 20,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "predictied_labels = np.argmax(test_pred.data, axis=1)\n",
    "predictied_labels"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "id": "cffe96e2",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.6855345911949685"
      ]
     },
     "execution_count": 21,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "accuracy_score(predictied_labels, test['sentiment'])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "id": "743b0d95",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.681299714243064"
      ]
     },
     "execution_count": 22,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "f1_score(test['sentiment'], predictied_labels, average='macro')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "id": "939443ea",
   "metadata": {},
   "outputs": [],
   "source": [
    "lime = LimeTextExplainer(automl, feature_selection='lasso', force_order=False)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "id": "9fae7a64",
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|██████████████████████████████████████████████████████████████████████████████████| 16/16 [00:58<00:00,  3.67s/it]\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[15:21:48] Feature concated__text transformed\n",
      "[15:21:54] Last linear layer not founded, so init_bias=False\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\Admin\\.conda\\envs\\oldervenv\\Lib\\site-packages\\torch\\optim\\lr_scheduler.py:28: UserWarning: The verbose parameter is deprecated. Please use get_last_lr() to access the learning rate.\n",
      "  warnings.warn(\"The verbose parameter is deprecated. Please use get_last_lr() \"\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[15:22:37] Last linear layer not founded, so init_bias=False\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\Admin\\.conda\\envs\\oldervenv\\Lib\\site-packages\\torch\\optim\\lr_scheduler.py:28: UserWarning: The verbose parameter is deprecated. Please use get_last_lr() to access the learning rate.\n",
      "  warnings.warn(\"The verbose parameter is deprecated. Please use get_last_lr() \"\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[15:23:24] Last linear layer not founded, so init_bias=False\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\Admin\\.conda\\envs\\oldervenv\\Lib\\site-packages\\torch\\optim\\lr_scheduler.py:28: UserWarning: The verbose parameter is deprecated. Please use get_last_lr() to access the learning rate.\n",
      "  warnings.warn(\"The verbose parameter is deprecated. Please use get_last_lr() \"\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "\n",
       "    <div>\n",
       "        <p style=\"text-align: center\">\n",
       "            Text\n",
       "        </p>\n",
       "        <div style=\"border: 1px solid black;\">\n",
       "            <p style=\"font-size:14px;; margin-left: 1%; margin-right: 1%;\"><span style=\"background-color: #FFFEFE;\">\n",
       "12 </span> <span style=\"background-color: #B0B0FF;\">ноября</span> <span style=\"background-color: #FFFEFE;\"> в </span> <span style=\"background-color: #BCBCFF;\">ходе</span> <span style=\"background-color: #FFFEFE;\"> </span> <span style=\"background-color: #8080FF;\">строительства</span> <span style=\"background-color: #FFFEFE;\"> </span> <span style=\"background-color: #B3B3FF;\">вторых</span> <span style=\"background-color: #FFFEFE;\"> </span> <span style=\"background-color: #CCCCFF;\">путей</span> <span style=\"background-color: #FFFEFE;\"> </span> <span style=\"background-color: #B0B0FF;\">на</span> <span style=\"background-color: #FFFEFE;\"> </span> <span style=\"background-color: #D2D2FF;\">участке</span> <span style=\"background-color: #FFFEFE;\"> Алматы-Шу проводились технологические «окна» с остановкой движения поездов, которая явилась вынужденной мерой, сообщила пресс-служба АО «НК «Қазақстан темір жолы» (КТЖ), передает КазТАГ.\n",
       "«На данном участке (Алматы-Шу – КазТАГ) производились реконструкция горловин станций и стыковка новых магистральных путей с существующими станционными путями, что явилось причиной приостановки движения поездов в целях обеспечения безопасности», - говорится в сообщении на сайте КТЖ в воскресенье.\n",
       "Как отмечается, после технологических «окон» участок работает стабильно.\n",
       "«Линия Алматы-Шу - одна из самых напряженных, по ней ежедневно курсирует до 52 пассажирских и 40 грузовых поездов. С вводом в эксплуатацию вторых путей пропускная способность участка увеличится в 3 раза», - утверждают в компании.\n",
       "«В настоящее время все поезда идут по расписанию. Пассажиры опоздавших поездов могут получить компенсацию в соответствии с законом РК «О железнодорожном транспорте» и правилами перевозок пассажиров, багажа и грузобагажа железнодорожным транспортом РК. За задержку отправления или опоздания с прибытием пассажир может получить 3% от стоимости билета за каждый час ожидания», - пообещали в КТЖ.\n",
       "Ранее казахстанские СМИ сообщили о толпах пассажиров, переполнивших железнодорожный вокзал Алматы-1 в минувшую субботу, и несвоевременном получении информации о задержке поездов.\n",
       " \n",
       "\n",
       "\n",
       "</span> <span style=\"background-color: #FFFEFE;\">алматы</span> <span style=\"background-color: #FFFEFE;\"></span> <span style=\"background-color: #FFFEFE;\">шу</span> <span style=\"background-color: #FFFEFE;\"></span> <span style=\"background-color: #FFFEFE;\">проводились</span> <span style=\"background-color: #FFFEFE;\"></span> <span style=\"background-color: #FFFEFE;\">технологические</span> <span style=\"background-color: #FFFEFE;\"></span> <span style=\"background-color: #FFFEFE;\">окна</span> <span style=\"background-color: #FFFEFE;\"></span> <span style=\"background-color: #FFFEFE;\">остановкой</span> <span style=\"background-color: #FFFEFE;\"></span> <span style=\"background-color: #FFFEFE;\">движения</span> <span style=\"background-color: #FFFEFE;\"></span> <span style=\"background-color: #FFFEFE;\">поездов</span> <span style=\"background-color: #FFFEFE;\"></span> <span style=\"background-color: #FFFEFE;\">которая</span> <span style=\"background-color: #FFFEFE;\"></span> <span style=\"background-color: #FFFEFE;\">явилась</span> <span style=\"background-color: #FFFEFE;\"></span> <span style=\"background-color: #FFFEFE;\">вынужденной</span> <span style=\"background-color: #FFFEFE;\"></span> <span style=\"background-color: #FFFEFE;\">мерой</span> <span style=\"background-color: #FFFEFE;\"></span> <span style=\"background-color: #FFFEFE;\">сообщила</span> <span style=\"background-color: #FFFEFE;\"></span> <span style=\"background-color: #FFFEFE;\">пресс</span> <span style=\"background-color: #FFFEFE;\"></span> <span style=\"background-color: #FFFEFE;\">служба</span> <span style=\"background-color: #FFFEFE;\"></span> <span style=\"background-color: #FFFEFE;\">АО</span> <span style=\"background-color: #FFFEFE;\"></span> <span style=\"background-color: #FFFEFE;\">НК</span> <span style=\"background-color: #FFFEFE;\"></span> <span style=\"background-color: #FFFEFE;\">аза</span> <span style=\"background-color: #FFFEFE;\"></span> <span style=\"background-color: #FFFEFE;\">стан</span> <span style=\"background-color: #FFFEFE;\"></span> <span style=\"background-color: #FFFEFE;\">тем</span> <span style=\"background-color: #FFFEFE;\"></span> <span style=\"background-color: #FFFEFE;\">жолы</span> <span style=\"background-color: #FFFEFE;\"></span> <span style=\"background-color: #FFFEFE;\">КТЖ</span> <span style=\"background-color: #FFFEFE;\"></span> <span style=\"background-color: #FFFEFE;\">передает</span> <span style=\"background-color: #FFFEFE;\"></span> <span style=\"background-color: #FFFEFE;\">казтаг</span> <span style=\"background-color: #FFFEFE;\"></span> <span style=\"background-color: #B0B0FF;\">на</span> <span style=\"background-color: #FFFEFE;\"></span> <span style=\"background-color: #FFFEFE;\">данном</span> <span style=\"background-color: #FFFEFE;\"></span> <span style=\"background-color: #D2D2FF;\">участке</span> <span style=\"background-color: #FFFEFE;\"></span> <span style=\"background-color: #FFFEFE;\">алматы</span> <span style=\"background-color: #FFFEFE;\"></span> <span style=\"background-color: #FFFEFE;\">шу</span> <span style=\"background-color: #FFFEFE;\"></span> <span style=\"background-color: #FFFEFE;\">казтаг</span> <span style=\"background-color: #FFFEFE;\"></span> <span style=\"background-color: #FFFEFE;\">производились</span> <span style=\"background-color: #FFFEFE;\"></span> <span style=\"background-color: #FFFEFE;\">реконструкция</span> <span style=\"background-color: #FFFEFE;\"></span> <span style=\"background-color: #FFFEFE;\">горловин</span> <span style=\"background-color: #FFFEFE;\"></span> <span style=\"background-color: #FFFEFE;\">станций</span> <span style=\"background-color: #FFFEFE;\"></span> <span style=\"background-color: #FFFEFE;\">стыковка</span> <span style=\"background-color: #FFFEFE;\"></span> <span style=\"background-color: #FFFEFE;\">новых</span> <span style=\"background-color: #FFFEFE;\"></span> <span style=\"background-color: #FFFEFE;\">магистральных</span> <span style=\"background-color: #FFFEFE;\"></span> <span style=\"background-color: #CCCCFF;\">путей</span> <span style=\"background-color: #FFFEFE;\"></span> <span style=\"background-color: #FFFEFE;\">существующими</span> <span style=\"background-color: #FFFEFE;\"></span> <span style=\"background-color: #FFFEFE;\">станционными</span> <span style=\"background-color: #FFFEFE;\"></span> <span style=\"background-color: #FFFEFE;\">путями</span> <span style=\"background-color: #FFFEFE;\"></span> <span style=\"background-color: #FFFEFE;\">что</span> <span style=\"background-color: #FFFEFE;\"></span> <span style=\"background-color: #FFFEFE;\">явилось</span> <span style=\"background-color: #FFFEFE;\"></span> <span style=\"background-color: #FFFEFE;\">причиной</span> <span style=\"background-color: #FFFEFE;\"></span> <span style=\"background-color: #FFFEFE;\">приостановки</span> <span style=\"background-color: #FFFEFE;\"></span> <span style=\"background-color: #FFFEFE;\">движения</span> <span style=\"background-color: #FFFEFE;\"></span> <span style=\"background-color: #FFFEFE;\">поездов</span> <span style=\"background-color: #FFFEFE;\"></span> <span style=\"background-color: #FFFEFE;\">целях</span> <span style=\"background-color: #FFFEFE;\"></span> <span style=\"background-color: #FFFEFE;\">обеспечения</span> <span style=\"background-color: #FFFEFE;\"></span> <span style=\"background-color: #FFFEFE;\">безопасности</span> <span style=\"background-color: #FFFEFE;\"></span> <span style=\"background-color: #FFFEFE;\">говорится</span> <span style=\"background-color: #FFFEFE;\"></span> <span style=\"background-color: #FFFEFE;\">сообщении</span> <span style=\"background-color: #FFFEFE;\"></span> <span style=\"background-color: #B0B0FF;\">на</span> <span style=\"background-color: #FFFEFE;\"></span> <span style=\"background-color: #FFFEFE;\">сайте</span> <span style=\"background-color: #FFFEFE;\"></span> <span style=\"background-color: #FFFEFE;\">КТЖ</span> <span style=\"background-color: #FFFEFE;\"></span> <span style=\"background-color: #FFFEFE;\">воскресенье</span> <span style=\"background-color: #FFFEFE;\"></span> <span style=\"background-color: #FFFEFE;\">как</span> <span style=\"background-color: #FFFEFE;\"></span> <span style=\"background-color: #FFFEFE;\">отмечается</span> <span style=\"background-color: #FFFEFE;\"></span> <span style=\"background-color: #FFFEFE;\">после</span> <span style=\"background-color: #FFFEFE;\"></span> <span style=\"background-color: #FFFEFE;\">технологических</span> <span style=\"background-color: #FFFEFE;\"></span> <span style=\"background-color: #FFFEFE;\">окон</span> <span style=\"background-color: #FFFEFE;\"></span> <span style=\"background-color: #FFFEFE;\">участок</span> <span style=\"background-color: #FFFEFE;\"></span> <span style=\"background-color: #FFFEFE;\">работает</span> <span style=\"background-color: #FFFEFE;\"></span> <span style=\"background-color: #FFFEFE;\">стабильно</span> <span style=\"background-color: #FFFEFE;\"></span> <span style=\"background-color: #FFFEFE;\">линия</span> <span style=\"background-color: #FFFEFE;\"></span> <span style=\"background-color: #FFFEFE;\">алматы</span> <span style=\"background-color: #FFFEFE;\"></span> <span style=\"background-color: #FFFEFE;\">шу</span> <span style=\"background-color: #FFFEFE;\"></span> <span style=\"background-color: #FFFEFE;\">одна</span> <span style=\"background-color: #FFFEFE;\"></span> <span style=\"background-color: #FFFEFE;\">из</span> <span style=\"background-color: #FFFEFE;\"></span> <span style=\"background-color: #FFFEFE;\">самых</span> <span style=\"background-color: #FFFEFE;\"></span> <span style=\"background-color: #FFFEFE;\">напряженных</span> <span style=\"background-color: #FFFEFE;\"></span> <span style=\"background-color: #FFFEFE;\">по</span> <span style=\"background-color: #FFFEFE;\"></span> <span style=\"background-color: #FFFEFE;\">ней</span> <span style=\"background-color: #FFFEFE;\"></span> <span style=\"background-color: #FFFEFE;\">ежедневно</span> <span style=\"background-color: #FFFEFE;\"></span> <span style=\"background-color: #FFFEFE;\">курсирует</span> <span style=\"background-color: #FFFEFE;\"></span> <span style=\"background-color: #FFFEFE;\">до</span> <span style=\"background-color: #FFFEFE;\"></span> <span style=\"background-color: #FFFEFE;\">пассажирских</span> <span style=\"background-color: #FFFEFE;\"></span> <span style=\"background-color: #FFFEFE;\">грузовых</span> <span style=\"background-color: #FFFEFE;\"></span> <span style=\"background-color: #FFFEFE;\">поездов</span> <span style=\"background-color: #FFFEFE;\"></span> <span style=\"background-color: #FFFEFE;\">вводом</span> <span style=\"background-color: #FFFEFE;\"></span> <span style=\"background-color: #FFFEFE;\">эксплуатацию</span> <span style=\"background-color: #FFFEFE;\"></span> <span style=\"background-color: #B3B3FF;\">вторых</span> <span style=\"background-color: #FFFEFE;\"></span> <span style=\"background-color: #CCCCFF;\">путей</span> <span style=\"background-color: #FFFEFE;\"></span> <span style=\"background-color: #FFFEFE;\">пропускная</span> <span style=\"background-color: #FFFEFE;\"></span> <span style=\"background-color: #FFFEFE;\">способность</span> <span style=\"background-color: #FFFEFE;\"></span> <span style=\"background-color: #FFFEFE;\">участка</span> <span style=\"background-color: #FFFEFE;\"></span> <span style=\"background-color: #FFFEFE;\">увеличится</span> <span style=\"background-color: #FFFEFE;\"></span> <span style=\"background-color: #FFFEFE;\">раза</span> <span style=\"background-color: #FFFEFE;\"></span> <span style=\"background-color: #FFFEFE;\">утверждают</span> <span style=\"background-color: #FFFEFE;\"></span> <span style=\"background-color: #FFFEFE;\">компании</span> <span style=\"background-color: #FFFEFE;\"></span> <span style=\"background-color: #FFFEFE;\">настоящее</span> <span style=\"background-color: #FFFEFE;\"></span> <span style=\"background-color: #FFFEFE;\">время</span> <span style=\"background-color: #FFFEFE;\"></span> <span style=\"background-color: #FFFEFE;\">все</span> <span style=\"background-color: #FFFEFE;\"></span> <span style=\"background-color: #FFFEFE;\">поезда</span> <span style=\"background-color: #FFFEFE;\"></span> <span style=\"background-color: #FFFEFE;\">идут</span> <span style=\"background-color: #FFFEFE;\"></span> <span style=\"background-color: #FFFEFE;\">по</span> <span style=\"background-color: #FFFEFE;\"></span> <span style=\"background-color: #FFFEFE;\">расписанию</span> <span style=\"background-color: #FFFEFE;\"></span> <span style=\"background-color: #FFFEFE;\">пассажиры</span> <span style=\"background-color: #FFFEFE;\"></span> <span style=\"background-color: #FFFEFE;\">опоздавших</span> <span style=\"background-color: #FFFEFE;\"></span> <span style=\"background-color: #FFFEFE;\">поездов</span> <span style=\"background-color: #FFFEFE;\"></span> <span style=\"background-color: #FFFEFE;\">могут</span> <span style=\"background-color: #FFFEFE;\"></span> <span style=\"background-color: #FFFEFE;\">получить</span> <span style=\"background-color: #FFFEFE;\"></span> <span style=\"background-color: #FFFEFE;\">компенсацию</span> <span style=\"background-color: #FFFEFE;\"></span> <span style=\"background-color: #FFFEFE;\">соответствии</span> <span style=\"background-color: #FFFEFE;\"></span> <span style=\"background-color: #FFFEFE;\">законом</span> <span style=\"background-color: #FFFEFE;\"></span> <span style=\"background-color: #FFFEFE;\">РК</span> <span style=\"background-color: #FFFEFE;\"></span> <span style=\"background-color: #FFFEFE;\">железнодорожном</span> <span style=\"background-color: #FFFEFE;\"></span> <span style=\"background-color: #FFFEFE;\">транспорте</span> <span style=\"background-color: #FFFEFE;\"></span> <span style=\"background-color: #F3F3FF;\">правилами</span> <span style=\"background-color: #FFFEFE;\"></span> <span style=\"background-color: #FFFEFE;\">перевозок</span> <span style=\"background-color: #FFFEFE;\"></span> <span style=\"background-color: #FFFEFE;\">пассажиров</span> <span style=\"background-color: #FFFEFE;\"></span> <span style=\"background-color: #FFFEFE;\">багажа</span> <span style=\"background-color: #FFFEFE;\"></span> <span style=\"background-color: #F3F3FF;\">грузобагажа</span> <span style=\"background-color: #FFFEFE;\"></span> <span style=\"background-color: #FFFEFE;\">железнодорожным</span> <span style=\"background-color: #FFFEFE;\"></span> <span style=\"background-color: #FFFEFE;\">транспортом</span> <span style=\"background-color: #FFFEFE;\"></span> <span style=\"background-color: #FFFEFE;\">РК</span> <span style=\"background-color: #FFFEFE;\"></span> <span style=\"background-color: #FFFEFE;\">за</span> <span style=\"background-color: #FFFEFE;\"></span> <span style=\"background-color: #FFFEFE;\">задержку</span> <span style=\"background-color: #FFFEFE;\"></span> <span style=\"background-color: #FFFEFE;\">отправления</span> <span style=\"background-color: #FFFEFE;\"></span> <span style=\"background-color: #FFFEFE;\">или</span> <span style=\"background-color: #FFFEFE;\"></span> <span style=\"background-color: #FFFEFE;\">опоздания</span> <span style=\"background-color: #FFFEFE;\"></span> <span style=\"background-color: #FFFEFE;\">прибытием</span> <span style=\"background-color: #FFFEFE;\"></span> <span style=\"background-color: #FFFEFE;\">пассажир</span> <span style=\"background-color: #FFFEFE;\"></span> <span style=\"background-color: #FFFEFE;\">может</span> <span style=\"background-color: #FFFEFE;\"></span> <span style=\"background-color: #FFFEFE;\">получить</span> <span style=\"background-color: #FFFEFE;\"></span> <span style=\"background-color: #FFFEFE;\">от</span> <span style=\"background-color: #FFFEFE;\"></span> <span style=\"background-color: #FFFEFE;\">стоимости</span> <span style=\"background-color: #FFFEFE;\"></span> <span style=\"background-color: #FFFEFE;\">билета</span> <span style=\"background-color: #FFFEFE;\"></span> <span style=\"background-color: #FFFEFE;\">за</span> <span style=\"background-color: #FFFEFE;\"></span> <span style=\"background-color: #FFFEFE;\">каждый</span> <span style=\"background-color: #FFFEFE;\"></span> <span style=\"background-color: #FFFEFE;\">час</span> <span style=\"background-color: #FFFEFE;\"></span> <span style=\"background-color: #FFFEFE;\">ожидания</span> <span style=\"background-color: #FFFEFE;\"></span> <span style=\"background-color: #FFFEFE;\">пообещали</span> <span style=\"background-color: #FFFEFE;\"></span> <span style=\"background-color: #FFFEFE;\">КТЖ</span> <span style=\"background-color: #FFFEFE;\"></span> <span style=\"background-color: #FFFEFE;\">ранее</span> <span style=\"background-color: #FFFEFE;\"></span> <span style=\"background-color: #FFFEFE;\">казахстанские</span> <span style=\"background-color: #FFFEFE;\"></span> <span style=\"background-color: #FFFEFE;\">СМИ</span> <span style=\"background-color: #FFFEFE;\"></span> <span style=\"background-color: #F2F2FF;\">сообщили</span> <span style=\"background-color: #FFFEFE;\"></span> <span style=\"background-color: #FFFEFE;\">толпах</span> <span style=\"background-color: #FFFEFE;\"></span> <span style=\"background-color: #FFFEFE;\">пассажиров</span> <span style=\"background-color: #FFFEFE;\"></span> <span style=\"background-color: #FFFEFE;\">переполнивших</span> <span style=\"background-color: #FFFEFE;\"></span> <span style=\"background-color: #FFFEFE;\">железнодорожный</span> <span style=\"background-color: #FFFEFE;\"></span> <span style=\"background-color: #FFFEFE;\">вокзал</span> <span style=\"background-color: #FFFEFE;\"></span> <span style=\"background-color: #FFFEFE;\">алматы</span> <span style=\"background-color: #FFFEFE;\"></span> <span style=\"background-color: #FFFEFE;\">минувшую</span> <span style=\"background-color: #FFFEFE;\"></span> <span style=\"background-color: #FFFEFE;\">субботу</span> <span style=\"background-color: #FFFEFE;\"></span> <span style=\"background-color: #FFFEFE;\">несвоевременном</span> <span style=\"background-color: #FFFEFE;\"></span> <span style=\"background-color: #FFFEFE;\">получении</span> <span style=\"background-color: #FFFEFE;\"></span> <span style=\"background-color: #FFFEFE;\">информации</span> <span style=\"background-color: #FFFEFE;\"></span> <span style=\"background-color: #FFFEFE;\">задержке</span> <span style=\"background-color: #FFFEFE;\"></span> <span style=\"background-color: #FFFEFE;\">поездов</span> <span style=\"background-color: #FFFEFE;\"></span></p>\n",
       "        </div>\n",
       "        \n",
       "        <p style=\"text-align: center\">\n",
       "            Class mapping\n",
       "        </p>\n",
       "        <div style=\"margin-left: 10%; margin-right: 10%; \">\n",
       "            <div id=\"grad\" style=\"background: linear-gradient(90deg, #FF7E7E 0%, #FFFEFE 50%, #8080FF 100%); border: 1px solid black; margin-left: 1.5em; margin-right: 1.5em; float: center; \">\n",
       "                <p style=\"text-align:left; margin-left: 1%; margin-right: 1%; color: white;\">\n",
       "                    Other classes\n",
       "                    <span style=\"float:right;\">\n",
       "                        Class: 1\n",
       "                    </span>\n",
       "                </p>\n",
       "            </div>\n",
       "\n",
       "            <div style=\"margin-left: 1.5em; margin-right: 1.5em; \">\n",
       "                <div style=\"border-left: 1px solid black; height: 18px; float: left; width: 9.97%;\"><span style=\"position: relative; top: 1em; left: -1.085em\">-3.4</span></div> <div style=\"border-left: 1px solid black; height: 18px; float: left; width: 9.97%;\"><span style=\"position: relative; top: 1em; left: -1.085em\">-2.7</span></div> <div style=\"border-left: 1px solid black; height: 18px; float: left; width: 9.97%;\"><span style=\"position: relative; top: 1em; left: -1.085em\">-2.0</span></div> <div style=\"border-left: 1px solid black; height: 18px; float: left; width: 9.97%;\"><span style=\"position: relative; top: 1em; left: -1.085em\">-1.4</span></div> <div style=\"border-left: 1px solid black; height: 18px; float: left; width: 9.97%;\"><span style=\"position: relative; top: 1em; left: -1.085em\">-0.7</span></div> <div style=\"border-left: 1px solid black; height: 18px; float: left; width: 9.97%;\"><span style=\"position: relative; top: 1em; left: -0.7em\">0.0</span></div> <div style=\"border-left: 1px solid black; height: 18px; float: left; width: 9.97%;\"><span style=\"position: relative; top: 1em; left: -0.7em\">0.7</span></div> <div style=\"border-left: 1px solid black; height: 18px; float: left; width: 9.97%;\"><span style=\"position: relative; top: 1em; left: -0.7em\">1.4</span></div> <div style=\"border-left: 1px solid black; height: 18px; float: left; width: 9.97%;\"><span style=\"position: relative; top: 1em; left: -0.7em\">2.0</span></div> <div style=\"border-left: 1px solid black; height: 18px; float: left; width: 9.97%;\"><span style=\"position: relative; top: 1em; left: -0.7em\">2.7</span></div> <div style=\"border-left: 1px solid black; height: 18px; float: left; width: 0%;\"><span style=\"position: relative; top: 1em; left: -0.7em\">3.4</span></div>\n",
       "            </div>\n",
       "\n",
       "            <div style=\"float: right; right: 0.75em; top: -3em; position: relative; font-weight: bold;\"></div>\n",
       "            <div style=\"float: right; right: -2em; top: -2.9em; position: relative; font-weight: bold;\"></div>\n",
       "\n",
       "            <div style=\"float: left; left: -5.5em; top: -4.42em; position: relative;  font-weight: bold;\"></div>\n",
       "            <div style=\"float: left; left: -8.22em; top: -2.9em; position: relative;  font-weight: bold;\"></div>\n",
       "        </div>\n",
       "        \n",
       "    </div>\n",
       "    "
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "exp = lime.explain_instance(test.iloc[316], labels=(0, 1, 2), perturb_column='text')\n",
    "exp.visualize_in_notebook(1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "id": "0d63883c",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "text         \\n12 ноября в ходе строительства вторых путей ...\n",
       "sentiment                                                    1\n",
       "Name: 3502, dtype: object"
      ]
     },
     "execution_count": 25,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "test.iloc[316]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "id": "e8bedab1",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "1"
      ]
     },
     "execution_count": 26,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "predictied_labels[316]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "id": "746e932f",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>text</th>\n",
       "      <th>id</th>\n",
       "      <th>sentiment</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>Как сообщает пресс-служба акимата Алматы, для ...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>Казахстанские авиакомпании перевозят 250 тысяч...</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>На состоявшемся под председательством Касым-Жо...</td>\n",
       "      <td>2</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>В ОАЭ состоялись переговоры между казахстанско...</td>\n",
       "      <td>3</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>12 вагонов грузового поезда сошли с путей в Во...</td>\n",
       "      <td>4</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>Отправившиеся на «джихад» из города Сатпаева К...</td>\n",
       "      <td>5</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>\\nНазарбаев утвердил новый состав правительств...</td>\n",
       "      <td>6</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>ШЫМКЕНТ. КАЗИНФОРМ - В Шардаринском районе Южн...</td>\n",
       "      <td>7</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>С 5 августа 2011 года вступил в юридическую с...</td>\n",
       "      <td>8</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>Казахстанцы должны платить за коммунальные усл...</td>\n",
       "      <td>9</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                                                text  id  sentiment\n",
       "0  Как сообщает пресс-служба акимата Алматы, для ...   0          0\n",
       "1  Казахстанские авиакомпании перевозят 250 тысяч...   1          0\n",
       "2  На состоявшемся под председательством Касым-Жо...   2          0\n",
       "3  В ОАЭ состоялись переговоры между казахстанско...   3          0\n",
       "4  12 вагонов грузового поезда сошли с путей в Во...   4          0\n",
       "5  Отправившиеся на «джихад» из города Сатпаева К...   5          0\n",
       "6  \\nНазарбаев утвердил новый состав правительств...   6          0\n",
       "7  ШЫМКЕНТ. КАЗИНФОРМ - В Шардаринском районе Южн...   7          0\n",
       "8   С 5 августа 2011 года вступил в юридическую с...   8          0\n",
       "9  Казахстанцы должны платить за коммунальные усл...   9          0"
      ]
     },
     "execution_count": 27,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "articles_test = pd.read_json('data/articles/test.json')\n",
    "articles_test['sentiment'] = pd.Series([0] * len(articles_test), dtype=int)\n",
    "articles_test.head(10)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "id": "d5672d04",
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|████████████████████████████████████████████████████████████████████████████████████| 7/7 [00:42<00:00,  6.03s/it]\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[15:25:08] Feature concated__text transformed\n",
      "[15:25:13] Last linear layer not founded, so init_bias=False\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\Admin\\.conda\\envs\\oldervenv\\Lib\\site-packages\\torch\\optim\\lr_scheduler.py:28: UserWarning: The verbose parameter is deprecated. Please use get_last_lr() to access the learning rate.\n",
      "  warnings.warn(\"The verbose parameter is deprecated. Please use get_last_lr() \"\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[15:25:52] Last linear layer not founded, so init_bias=False\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\Admin\\.conda\\envs\\oldervenv\\Lib\\site-packages\\torch\\optim\\lr_scheduler.py:28: UserWarning: The verbose parameter is deprecated. Please use get_last_lr() to access the learning rate.\n",
      "  warnings.warn(\"The verbose parameter is deprecated. Please use get_last_lr() \"\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[15:26:23] Last linear layer not founded, so init_bias=False\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\Admin\\.conda\\envs\\oldervenv\\Lib\\site-packages\\torch\\optim\\lr_scheduler.py:28: UserWarning: The verbose parameter is deprecated. Please use get_last_lr() to access the learning rate.\n",
      "  warnings.warn(\"The verbose parameter is deprecated. Please use get_last_lr() \"\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "array([1, 2, 1, ..., 1, 1, 1], dtype=int64)"
      ]
     },
     "execution_count": 28,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "predictions = automl.predict(articles_test)\n",
    "labels = np.argmax(predictions.data, axis=1)\n",
    "labels"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "id": "9cf7b30c",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "OK!\n"
     ]
    }
   ],
   "source": [
    "assert len(labels) == articles_test.shape[0]\n",
    "print(\"OK!\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "id": "97d497ce",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>text</th>\n",
       "      <th>id</th>\n",
       "      <th>sentiment</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>184</th>\n",
       "      <td>Обзор розничных вкладов. ТОП-10 БВУ по наращив...</td>\n",
       "      <td>184</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1724</th>\n",
       "      <td>Активная работа по рассмотрению и решению вопр...</td>\n",
       "      <td>1725</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>251</th>\n",
       "      <td>Старики, проживающие в медико-социальных учреж...</td>\n",
       "      <td>251</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1121</th>\n",
       "      <td>\\nЗа 2016 год скорость поездов с вагонами «Тал...</td>\n",
       "      <td>1122</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1486</th>\n",
       "      <td>конкуренции Министерства национальной экономик...</td>\n",
       "      <td>1487</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>111</th>\n",
       "      <td>Астана. 23 января. Kazakhstan Today - АО \"ЕНПФ...</td>\n",
       "      <td>111</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1450</th>\n",
       "      <td>Под таким лозунгом фондом «Samruk-Kazyna Trust...</td>\n",
       "      <td>1451</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>188</th>\n",
       "      <td>Фото с сайта 365info.kz\\nНа утилизации зарабат...</td>\n",
       "      <td>188</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>614</th>\n",
       "      <td>КРЫМский бандеровец, блогер \\n\\n1. Сегодня ФСБ...</td>\n",
       "      <td>615</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>220</th>\n",
       "      <td>Олимпийские чемпионы Ермахан Ибраимов и Валери...</td>\n",
       "      <td>220</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                                                   text    id  sentiment\n",
       "184   Обзор розничных вкладов. ТОП-10 БВУ по наращив...   184          2\n",
       "1724  Активная работа по рассмотрению и решению вопр...  1725          1\n",
       "251   Старики, проживающие в медико-социальных учреж...   251          1\n",
       "1121  \\nЗа 2016 год скорость поездов с вагонами «Тал...  1122          2\n",
       "1486  конкуренции Министерства национальной экономик...  1487          1\n",
       "111   Астана. 23 января. Kazakhstan Today - АО \"ЕНПФ...   111          1\n",
       "1450  Под таким лозунгом фондом «Samruk-Kazyna Trust...  1451          2\n",
       "188   Фото с сайта 365info.kz\\nНа утилизации зарабат...   188          1\n",
       "614   КРЫМский бандеровец, блогер \\n\\n1. Сегодня ФСБ...   615          0\n",
       "220   Олимпийские чемпионы Ермахан Ибраимов и Валери...   220          2"
      ]
     },
     "execution_count": 30,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "articles_test['sentiment'] = labels\n",
    "articles_test.sample(10)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "id": "9e7c7321",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>text</th>\n",
       "      <th>id</th>\n",
       "      <th>sentiment</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>599</th>\n",
       "      <td>Регулятор простимулирует население к сбережени...</td>\n",
       "      <td>600</td>\n",
       "      <td>neutral</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>752</th>\n",
       "      <td>Общая сумма, которую пострадавшие хотят взыска...</td>\n",
       "      <td>753</td>\n",
       "      <td>negative</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2017</th>\n",
       "      <td>Автопарк выплатит более полумиллиона тенге уще...</td>\n",
       "      <td>2029</td>\n",
       "      <td>negative</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1001</th>\n",
       "      <td>Аэропорты Астаны и Алматы в десятке крупнейших...</td>\n",
       "      <td>1002</td>\n",
       "      <td>positive</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>329</th>\n",
       "      <td>\\n\\nТерритория между 27 и 16 микрорайонами п...</td>\n",
       "      <td>329</td>\n",
       "      <td>neutral</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>483</th>\n",
       "      <td>Цены на водоснабжение и водоотведение останутс...</td>\n",
       "      <td>483</td>\n",
       "      <td>neutral</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>682</th>\n",
       "      <td>\\nСеверный морской порт Актау был введен в экс...</td>\n",
       "      <td>683</td>\n",
       "      <td>positive</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>325</th>\n",
       "      <td>У нас образованный, впитавший в себя историчес...</td>\n",
       "      <td>325</td>\n",
       "      <td>neutral</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>166</th>\n",
       "      <td>В Алматы стартовала Эстафета огня, посвященная...</td>\n",
       "      <td>166</td>\n",
       "      <td>neutral</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1034</th>\n",
       "      <td>Вода в реке Акбулак не вредна для жителей Аста...</td>\n",
       "      <td>1035</td>\n",
       "      <td>neutral</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                                                   text    id sentiment\n",
       "599   Регулятор простимулирует население к сбережени...   600   neutral\n",
       "752   Общая сумма, которую пострадавшие хотят взыска...   753  negative\n",
       "2017  Автопарк выплатит более полумиллиона тенге уще...  2029  negative\n",
       "1001  Аэропорты Астаны и Алматы в десятке крупнейших...  1002  positive\n",
       "329     \\n\\nТерритория между 27 и 16 микрорайонами п...   329   neutral\n",
       "483   Цены на водоснабжение и водоотведение останутс...   483   neutral\n",
       "682   \\nСеверный морской порт Актау был введен в экс...   683  positive\n",
       "325   У нас образованный, впитавший в себя историчес...   325   neutral\n",
       "166   В Алматы стартовала Эстафета огня, посвященная...   166   neutral\n",
       "1034  Вода в реке Акбулак не вредна для жителей Аста...  1035   neutral"
      ]
     },
     "execution_count": 31,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "articles_test['sentiment'] = articles_test['sentiment']\\\n",
    "    .map({v: k for k, v in sentiment_map.items()})\n",
    "articles_test.sample(10)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "id": "264824c0",
   "metadata": {},
   "outputs": [],
   "source": [
    "articles_test[['id', 'sentiment']].to_csv('output.csv', index=False)"
   ]
  },
  {
   "attachments": {
    "image.png": {
     "image/png": "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iIiIOqqqfLwf+QLmx+dro+ab6eKGsQsWI/xhN9iwhZLaoGzvakx/dhkyf9IWmLEZOgNvvv402jEG0mXFoJKIiIiIqD1Ol6Hwm0KcqtRDr9PB1sEV7i72xpYmovao1aPq5FHknjgFvV4Hnc4WToP6wMmmY3d3bYxBJREREREREVns8o7+SkRERERERFc0BpVERERERERkMQaVREREREREZDEGlURERERERGQxBpVERERERERkMQaVREREREREZDEGlURERERERGQxBpVERERERERkMQaVREREREREZDEGlURERERERGQxBpVERERERERkMQaVREREREREZDEGlURERERERGQxBpVERERERERkMQaVREREREREZDEGlURERERERGQxBpVERERERERksesUQZtut4KjRdoUERERERERXYsuKqgkIiIiIiKiaxu7vxIREREREZHFGFQSERERERGRxRhUEhERERERkcUYVBIREREREZHFGFQSERERERGRxRhUEhERERERkcUYVBIREREREZHFGFQSERERERGRxRhUEhERERERkcUYVBIREREREZHFGFQSERERERGRxRhUEhERERERkcUYVBIREREREZHFGFQSERERERGRxRhUEhERERERkcUYVBIREREREZHFGFQSERERERGRxRhUEhERERERkcUYVBIREREREZHFGFQSERERERGRxRhUEhERERERkcUYVBIREREREZHFGFReUcqwIzwAowPCsaNMW/SbOIDoALmftcjRlhARERERETWFQeUVprI0H3mHylB5XlvwGyk7ZNwPERERERFRS65TBG264/tVj6rig0jLTsPebw7iy+rDKPhVW/eH7vh/Xf+EgX8cir94DcOfHbtD11FC5tIsxKyKRcLBYjHjCK+gEDwz1hv21xtXoywVcyeuQi4ewivJT8LTtHh7OELfzsOASWsQ+ecDappPjuaj7IwO9m59cGsnY3ons3QLXdMR8a9YZFfawvWBpzBvQv1+TPnhgQXY+k8P40K19XMiVua545k1ERhZvBajFyTixKGjqIINXAc6Quc+BesjRsBe2+ICrZ2fUJW/BdFrE7G7sFLMNUxzYstMPLXmKGwDFiNugptxA0GftQxjItOBP8/Aey/6iqMhIiIiIqKO5spoqawtR/b2SDz2kjfuXDUJU/YlYGOlWUAp/VqOzyo/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BZWm5/Iuh/w4vHJgCOYGmw/WQu1h+DYOkelumDvJo0New4qUeQje1AMzn/ZDLxQh6+23kev/Fl4PaOMDr0RERER01bmqgkqp4qdKVNecxm233tKwxbINZAvl/079iK7WN8Gum3xh4pWjpnA/yu2GwKW5EXeILpGaY/uRniZHzbVDLz8/3OfGgJKIiIjoWnbVBZWSbLEs+7EC3e1uxs22XXHddddpa5omL4F8hrK84mfY32J3RbVQEhERERERXU5XZVApyWcsZZAoXwti0/UmbdAdK3TqZByb6Pz5X9V3W8pXkchRXuV6GYReymcoiYiIiIiIrnZXbVBpYjCcw+kzZ3DmzC8wnDunBpOSDC5vuME4aqx8JcnFjvJKRERERER0Lbrqg0oiIiIiIiL67VwV76kkIiIiIiKiy4NBJREREREREVmMQSURERERERFZjEElERERERERWYxBJREREREREVmMQSURERERERFZjEElERERERERWYxBJREREREREVmMQSURERERERFZjEElERERERERWYxBJREREREREVmMQSURERERERFZjEElERERERERWYxBJREREREREVkI+P/AIbjaNlJuZAAAAABJRU5ErkJggg=="
    }
   },
   "cell_type": "markdown",
   "id": "42b9fc4c",
   "metadata": {},
   "source": [
    "![image.png](attachment:image.png)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "4aa2f141",
   "metadata": {},
   "source": [
    "## Сохранение модели"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "id": "e7d731de",
   "metadata": {},
   "outputs": [],
   "source": [
    "import pickle\n",
    "\n",
    "with open('models/large_text_lama_classifier.pkl', 'wb') as f:\n",
    "    pickle.dump(automl, f)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "cf985f20",
   "metadata": {},
   "source": [
    "## Загрузка и повторное тестирование модели"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "id": "67916c2d",
   "metadata": {},
   "outputs": [],
   "source": [
    "with open('models/large_text_lama_classifier.pkl', 'rb') as f:\n",
    "    loaded_automl = pickle.load(f)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "id": "d4850ffa",
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|████████████████████████████████████████████████████████████████████████████████████| 5/5 [00:40<00:00,  8.12s/it]\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[15:33:30] Feature concated__text transformed\n",
      "[15:33:35] Last linear layer not founded, so init_bias=False\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\Admin\\.conda\\envs\\oldervenv\\Lib\\site-packages\\torch\\optim\\lr_scheduler.py:28: UserWarning: The verbose parameter is deprecated. Please use get_last_lr() to access the learning rate.\n",
      "  warnings.warn(\"The verbose parameter is deprecated. Please use get_last_lr() \"\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[15:35:37] Last linear layer not founded, so init_bias=False\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\Admin\\.conda\\envs\\oldervenv\\Lib\\site-packages\\torch\\optim\\lr_scheduler.py:28: UserWarning: The verbose parameter is deprecated. Please use get_last_lr() to access the learning rate.\n",
      "  warnings.warn(\"The verbose parameter is deprecated. Please use get_last_lr() \"\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[15:36:11] Last linear layer not founded, so init_bias=False\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\Admin\\.conda\\envs\\oldervenv\\Lib\\site-packages\\torch\\optim\\lr_scheduler.py:28: UserWarning: The verbose parameter is deprecated. Please use get_last_lr() to access the learning rate.\n",
      "  warnings.warn(\"The verbose parameter is deprecated. Please use get_last_lr() \"\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "CPU times: total: 2min 27s\n",
      "Wall time: 4min 12s\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "array([[0.08144191, 0.4056108 , 0.5129473 ],\n",
       "       [0.70450854, 0.2367191 , 0.05877233],\n",
       "       [0.03906991, 0.34120739, 0.61972284],\n",
       "       ...,\n",
       "       [0.11621585, 0.80239284, 0.08139141],\n",
       "       [0.07361812, 0.30763164, 0.61875033],\n",
       "       [0.09449469, 0.86721945, 0.03828591]], dtype=float32)"
      ]
     },
     "execution_count": 35,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "%%time\n",
    "test_pred = automl.predict(test)\n",
    "test_pred"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "id": "6e6e2d4a",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([2, 0, 2, ..., 1, 2, 1], dtype=int64)"
      ]
     },
     "execution_count": 36,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "predictied_labels = np.argmax(test_pred.data, axis=1)\n",
    "predictied_labels"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "id": "68f2f9df",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.6855345911949685"
      ]
     },
     "execution_count": 37,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "accuracy_score(predictied_labels, test['sentiment'])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 38,
   "id": "20262e5e",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.681299714243064"
      ]
     },
     "execution_count": 38,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "f1_score(test['sentiment'], predictied_labels, average='macro')"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "py311",
   "language": "python",
   "name": "py311"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.11.9"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
